一樣是在面試場景:如果不使用 Jetpack Navigation,你還可以怎麼做來達到 Fragment 的跳轉?
實作時,使用 Jetpack Navigation 來設定底部導航列對應 Fragment 的切換確實方便。
但有時候,別人更想知道你怎麼看待在多個 Fragment 之間切換的本質。
FragmentManager
class 負責在應用程式的 Fragment 相關操作,像是添加、移除和替換,以及將這些操作加入至背景堆疊 / 背景堆棧(back stack)。
如果你使用 Jetpack Navigation Library,你可能永遠不會與FragmentManager
直接互動。因為 Jetpack Navigation Library 幫助你使用了FragmentManager
。不過,任何使用 Fragment 的應用程式某程度上都使用到FragmentManager
。因此,我們需要瞭解FragmentManager
是什麼,以及它如何運作。
每個FragmentActivity
和子類別(例:AppCompatActivity
),都能透過getSupportFragmentManager()
方法來使用 FragmentManager。
Fragment 也能持有一個或多個子 Fragment。你可以透過getChildFragmentManager()
來取得 FragmentManager 的引用,以便管理子 Fragment。如果你需要使用父級 FragmentManager,可使用getParentFragmentManager()
。
[圖1] 兩個 UI 佈局範例顯示 Fragments 與 它們持有者 Activities 的關係。
圖1 的兩個例子都只有一個 Activity。Activity 透過BottomNavigationView
向使用者顯示頂層(top-level)導航。BottomNavigationView
負責在應用程式不同的畫面上,置換 host fragment。其中每個畫面都以分隔的 Fragment 來實現。
範例1,host fragment 持有2個子 Fragment,來形成雙視窗(split-view)畫面。
範例2,host fragment 持有1個子 Fragment,來顯示滑動視圖(swipe view)的 Fragment。
參考資料